#include "GetUserList.h"
#include "Protocol/ProtocolHelper.h"
#include "Log/ILogManager.h"
#include "State/AppState.h"

using namespace Command;

GetUserList::GetUserList() :
	TransactionCommand(USER_LIST_REQUEST, USER_LIST_RESPONSE)
{
}

void GetUserList::execute()
{
	QByteArray data;
	sendData(data); // вызываем sendData с пустыми данными, чтобы прикрепился тип сообщения
}

void GetUserList::processResponse(QByteArray &data)
{
	QDataStream readStream(&data, QIODevice::ReadOnly);

	quint8 messageType;
	quint16 userCount;
	readStream >> messageType >> userCount;

	QList<User> users;
	quint32 userId;
	for(int i=0;i<userCount;i++){
		readStream >> userId;
		UserState userState =(UserState) Protocol::Helper::fromEnumStream(readStream);
		QString userName = Protocol::Helper::fromStringStream(readStream);

		User user(userId, userName);
		user.setState(userState);
		users.append(user);
	}

	core()->state().setUserList(users);

	// debug output
	QString userDebug = "User List Update: ";
	int num=0;
	foreach(User user, core()->state().userList()){
		num++;
		userDebug += QString("%1) %2[%3]-%4  ").arg(num).arg(user.name())
				.arg(user.id()).arg(user.state());
	}
	core()->addLogMsg(userDebug, Log::ILogManager::DEBUG);

	//

	setResponseRecieved();
}
